package com.vita.core.put;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.vita.core.task.CompTask;
import com.vita.core.task.Task;
import com.vita.core.task.TaskExecute;
import com.vita.excepsion.ConverterException;

/**
 * input （累加输入操作符）：
 * 所有的 input(I i) 内容都会累加到一个list里面
 */
public class Input<I> implements Task {
    private List<I> inputs;

    public Input(I i) {
        this.inputs = new ArrayList<>();
        this.inputs.add(i);
    }

    public Input(List<I> list) {
        this.inputs = list;
    }

    public Input<I> input(I i){
        Objects.requireNonNull(i, "入参为NULL");
        inputs.add(i);
        return this;
    }

    public Input<I> input(List<I> i){
        Objects.requireNonNull(i, "入参为NULL");
        inputs.addAll(i);
        return this;
    }

    public <O> Output<I,O> output(O o){
        return new Output<I,O>(inputs,o);
    }

    public <O> Output<I,O> output(List<O> outputs){
        return new Output<I,O>(this.inputs,outputs);
    }

    @Override
    public void plan(TaskExecute execute) {
        if(inputs.size()>1) throw new ConverterException("请使用 PutsExecute<I,String>");
        execute.run(inputs.get(0),null);
    }
    public void plan(PutsExecute execute) {
        execute.run(inputs,new ArrayList<String>());
    }

    @Override
    public Input<I> oneStep(Task task) {
        if(task instanceof CompTask){
            task.oneStep(task);
        }else{
            throw new ConverterException("oneStep(Task task) 不支持SimpTask的传入，请使用CompTask");
        }
        return this;
    }

}
